Skill

Django ডেকোরেটর এবং Middleware

Web Development - জ্যাঙ্গো (Django)
218

Django তে ডেকোরেটর (Decorator) এবং Middleware দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা Django অ্যাপ্লিকেশনগুলির কার্যকারিতা এবং ডেভেলপমেন্ট প্রক্রিয়া সহজতর করে। এই দুটি কনসেপ্ট ডেটা প্রসেসিং, ফাংশনালিটি পরিবর্তন এবং রিকোয়েস্ট-রেসপন্স লাইফসাইকেল হ্যান্ডল করার ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে।


Django ডেকোরেটর (Decorator)

Django তে ডেকোরেটর সাধারণভাবে ফাংশন বা ক্লাসের আচরণ পরিবর্তন করার জন্য ব্যবহৃত হয়। ডেকোরেটর মূলত একটি ফাংশনকে সাজিয়ে দেয় (wrap) এবং তার আচরণে কিছু অতিরিক্ত কার্যকারিতা যোগ করে।

১. Django এর বিল্ট-ইন ডেকোরেটর

Django কিছু সাধারণ ডেকোরেটর প্রদান করে, যা আপনাকে প্রজেক্টের বিভিন্ন অংশে সহজে বিভিন্ন কার্যক্রম পরিচালনা করতে সাহায্য করে। কিছু গুরুত্বপূর্ণ ডেকোরেটর নিচে দেওয়া হলো:

  • @login_required: শুধুমাত্র লগড ইন ব্যবহারকারীদের জন্য অ্যাক্সেস প্রদান করে।

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
        return render(request, 'template.html')
    

    এখানে, যদি ব্যবহারকারী লগ ইন না করে থাকে, তাহলে Django তাকে লগইন পৃষ্ঠায় রিডাইরেক্ট করবে।

  • @permission_required: নির্দিষ্ট অনুমতি বা পারমিশন চেক করার জন্য ব্যবহার করা হয়।

    from django.contrib.auth.decorators import permission_required
    
    @permission_required('app.can_edit', raise_exception=True)
    def edit_view(request):
        return render(request, 'edit_template.html')
    
  • @csrf_exempt: ক্রস-সাইট রিকোয়েস্ট ফরজি (CSRF) টোকেন যাচাই থেকে বাদ দেওয়ার জন্য ব্যবহৃত হয়।

    from django.views.decorators.csrf import csrf_exempt
    
    @csrf_exempt
    def my_view(request):
        return render(request, 'template.html')
    

২. কাস্টম ডেকোরেটর তৈরি করা

আপনি চাইলে নিজের ডেকোরেটরও তৈরি করতে পারেন। কাস্টম ডেকোরেটর তৈরির জন্য একটি ফাংশন লিখতে হয়, যা মূল ফাংশনকে সাজিয়ে দেয় (wrap) এবং অতিরিক্ত কার্যকারিতা যোগ করে।

from functools import wraps
from django.http import HttpResponseForbidden

def my_custom_decorator(view_func):
    @wraps(view_func)
    def _wrapped_view(request, *args, **kwargs):
        # কিছু কাস্টম চেক বা লজিক
        if not request.user.is_superuser:
            return HttpResponseForbidden("You are not allowed to access this page")
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখন, এই কাস্টম ডেকোরেটরটি একটি ভিউ ফাংশনের উপর প্রয়োগ করতে পারেন:

@my_custom_decorator
def my_view(request):
    return render(request, 'template.html')

Django Middleware

Middleware হল Django অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ যা রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী পর্যায়ে প্রক্রিয়া সম্পাদন করে। এটি মূলত HTTP রিকোয়েস্ট এবং রেসপন্সের উপর কিছু লজিক প্রয়োগ করার সুযোগ দেয়। Django Middleware ফাংশনগুলি বিভিন্ন স্তরের নিরাপত্তা, লগিং, সেশন ম্যানেজমেন্ট, এবং বিভিন্ন ধরনের ট্রান্সফরমেশন করে।

১. Middleware কীভাবে কাজ করে?

Django তে, Middleware একাধিক ফাংশন বা ক্লাস হতে পারে, যা রিকোয়েস্ট আসার আগে এবং রেসপন্স ফেরত দেওয়ার আগে কার্যকরী হয়। সাধারণত, Middleware শ্রেণী বা ফাংশনগুলির তালিকা MIDDLEWARE সেটিংস এ যুক্ত করা হয়।

  • request: রিকোয়েস্ট অবজেক্টের উপর প্রক্রিয়া করা হয়।
  • response: রেসপন্স অবজেক্টের উপর প্রক্রিয়া করা হয়।

২. Middleware এর উদাহরণ

আপনি Django তে বিভিন্ন built-in middleware যেমন সেশন, কুকি, CSRF নিরাপত্তা, এবং আরো অনেক কিছু ব্যবহার করতে পারেন। তবে, আপনি যদি কাস্টম middleware তৈরি করতে চান, তাহলে আপনাকে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করতে হবে:

কাস্টম Middleware তৈরি

একটি সাধারণ কাস্টম Middleware ক্লাসের উদাহরণ নিচে দেওয়া হলো:

from django.utils.timezone import now

class SimpleLoggingMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # রিকোয়েস্ট গ্রহণ করার আগে কিছু লজিক
        print(f"Request received at {now()}")

        # রিকোয়েস্ট হ্যান্ডলিং
        response = self.get_response(request)

        # রেসপন্স ফেরত দেওয়ার আগে কিছু লজিক
        print(f"Response sent at {now()}")

        return response

এখানে:

  • __init__: এটি মিডলওয়ার ইনিশিয়ালাইজ করে এবং get_response ফাংশন গ্রহণ করে, যা পরবর্তী মিডলওয়ার বা ভিউ কল করতে ব্যবহৃত হয়।
  • __call__: এটি মূল কার্যকরী ফাংশন, যেখানে রিকোয়েস্ট গ্রহণ এবং রেসপন্স ফেরত দেওয়ার প্রক্রিয়া থাকে।
Middleware যোগ করা

এখন, এই কাস্টম Middleware টি Django প্রজেক্টে settings.py এর MIDDLEWARE তালিকায় যোগ করতে হবে:

# settings.py

MIDDLEWARE = [
    ...
    'myapp.middleware.SimpleLoggingMiddleware',  # কাস্টম Middleware যোগ করা
    ...
]

৩. Middleware এর ধরন

Middleware বিভিন্ন ধরণের হতে পারে, যেমন:

  • Security Middleware: যেমন CSRF নিরাপত্তা, HTTPS রিডাইরেকশন।
  • Session Middleware: ইউজার সেশন ম্যানেজমেন্ট।
  • Authentication Middleware: ইউজার অ্যাথেন্টিকেশন চেক করা।
  • Logging Middleware: লগিং ডেটা সংগ্রহ করা।
  • Performance Middleware: কোড অপটিমাইজেশন বা লোড পরীক্ষা করা।

সারাংশ

  • ডেকোরেটর: ডেকোরেটর হল ফাংশনের আচরণ পরিবর্তন করার একটি উপায়। Django তে বিভিন্ন বিল্ট-ইন ডেকোরেটর যেমন @login_required, @permission_required ব্যবহার করা হয়। আপনি কাস্টম ডেকোরেটরও তৈরি করতে পারেন, যা ফাংশনের আগের বা পরে কিছু অতিরিক্ত কার্যকলাপ করতে সাহায্য করে।
  • Middleware: Middleware হল Django অ্যাপ্লিকেশন এর একটি গুরুত্বপূর্ণ অংশ যা রিকোয়েস্ট এবং রেসপন্স হ্যান্ডলিং এর মাঝে কার্যক্রম সম্পাদন করে। Middleware এর মাধ্যমে আপনি ইউজার সেশন, লগিং, নিরাপত্তা চেক এবং আরো অনেক কিছু করতে পারেন। Django তে কাস্টম Middleware তৈরি এবং কনফিগার করা খুবই সহজ।
Content added By

Django ডেকোরেটর (Login Required, Permission Required)

207

Django ডেকোরেটর একটি খুবই শক্তিশালী টুল, যা ফাংশন বা ক্লাসে অতিরিক্ত ফাংশনালিটি যুক্ত করতে ব্যবহৃত হয়। বিশেষত, login_required এবং permission_required ডেকোরেটরগুলি সাধারণত ব্যবহারকারীর অথেনটিকেশন এবং অনুমতিগুলি পরিচালনা করতে ব্যবহৃত হয়। এই ডেকোরেটরগুলির মাধ্যমে আপনি নির্দিষ্ট ভিউ বা ফাংশনগুলোতে অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন।

এখানে আমরা দেখব login_required এবং permission_required ডেকোরেটরের ব্যবহার কীভাবে করা হয়।


১. login_required ডেকোরেটর

login_required ডেকোরেটরটি নিশ্চিত করে যে, যে ভিউটি ব্যবহার করা হচ্ছে, সেটি শুধুমাত্র লগইন করা ব্যবহারকারীর জন্য প্রবেশযোগ্য হবে। যদি ব্যবহারকারী লগইন না করে ভিউতে প্রবেশ করতে চায়, তাহলে তাকে স্বয়ংক্রিয়ভাবে লগইন পেজে রিডিরেক্ট করা হবে।

ডেকোরেটর ব্যবহার করা

প্রথমে, আপনাকে Django এর login_required ডেকোরেটরটি ইমপোর্ট করতে হবে:

from django.contrib.auth.decorators import login_required

এখন, আপনি যেকোনো ভিউ ফাংশনে এটি ব্যবহার করতে পারেন:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    return render(request, 'my_template.html')

এখানে:

  • @login_required ডেকোরেটরটি ভিউ ফাংশনের উপরে যুক্ত করা হয়েছে, যা নিশ্চিত করবে যে, শুধুমাত্র লগইন করা ব্যবহারকারীরা এই ভিউটি অ্যাক্সেস করতে পারবে।
  • যদি ব্যবহারকারী লগইন না করে এই ভিউতে প্রবেশ করার চেষ্টা করে, তাহলে তাকে স্বয়ংক্রিয়ভাবে LOGIN_URL (যেটি সাধারণত /login/ অথবা সেট করা URL) এ রিডিরেক্ট করা হবে।

কাস্টম রিডিরেকশন ইউআরএল

আপনি যদি চাইলে লগইন না করা ব্যবহারকারীদের একটি নির্দিষ্ট পেজে রিডিরেক্ট করতে পারেন। এটি করার জন্য LOGIN_URL সেট করতে হবে।

# settings.py

LOGIN_URL = '/user/login/'

এটি ব্যবহারকারীকে /user/login/ পেজে রিডিরেক্ট করবে যদি তারা লগইন না থাকে।


২. permission_required ডেকোরেটর

permission_required ডেকোরেটরটি নির্দিষ্ট একটি অনুমতির সাথে সম্পর্কিত ভিউ অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে ব্যবহারকারীর কাছে নির্দিষ্ট permission থাকতে হবে, তবেই তারা সেই ভিউ অ্যাক্সেস করতে পারবে।

ডেকোরেটর ব্যবহার করা

permission_required ডেকোরেটরটি ব্যবহার করার জন্য আপনাকে প্রথমে এটি ইমপোর্ট করতে হবে:

from django.contrib.auth.decorators import permission_required

এখন, আপনি এটিকে ব্যবহার করতে পারেন:

from django.contrib.auth.decorators import permission_required
from django.shortcuts import render

@permission_required('app_name.can_edit', raise_exception=True)
def edit_view(request):
    return render(request, 'edit_template.html')

এখানে:

  • 'app_name.can_edit': এটি একটি কাস্টম পারমিশন যা আপনি মডেল বা অ্যাপের জন্য তৈরি করেছেন। এটি <app_name>.<permission> ফরম্যাটে হবে। এখানে can_edit হলো কাস্টম পারমিশন যা আপনি ডিফাইন করেছেন।
  • raise_exception=True: যদি ব্যবহারকারীর কাছে যথাযথ অনুমতি না থাকে, তাহলে একটি PermissionDenied এক্সসেপশন ফেলা হবে।

কাস্টম পারমিশন তৈরি করা

আপনি যদি কাস্টম পারমিশন তৈরি করতে চান, তাহলে তা মডেল ক্লাসের মধ্যে Meta ক্লাসের মাধ্যমে করা যায়।

from django.db import models

class MyModel(models.Model):
    name = models.CharField(max_length=100)

    class Meta:
        permissions = [
            ("can_edit", "Can Edit the object"),
            ("can_view", "Can View the object"),
        ]

এখানে permissions লিস্টে আপনি কাস্টম পারমিশন ডিফাইন করেছেন। এর পর ব্যবহারকারীকে এই পারমিশন দেওয়া হবে অ্যাডমিন প্যানেল অথবা ডাটাবেস ম্যানেজমেন্টের মাধ্যমে।


৩. @user_passes_test ডেকোরেটর

@user_passes_test ডেকোরেটরটি ব্যবহারকারীর একটি কাস্টম চেকের মাধ্যমে অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ব্যবহার করা হয়। এটি একটি ফাংশন নেয়, যা True বা False রিটার্ন করে, এবং True হলে ব্যবহারকারী ভিউ অ্যাক্সেস করতে পারবে, অন্যথায় রিডিরেক্ট হবে।

ডেকোরেটর ব্যবহার করা

from django.contrib.auth.decorators import user_passes_test

def user_is_admin(user):
    return user.is_staff  # ব্যবহারকারী যদি স্টাফ হয়, তবেই True রিটার্ন হবে

@user_passes_test(user_is_admin)
def admin_view(request):
    return render(request, 'admin_template.html')

এখানে:

  • user_is_admin ফাংশনটি একটি কাস্টম চেক যা যাচাই করে ব্যবহারকারী স্টাফ (অ্যাডমিন) কিনা। যদি ব্যবহারকারী স্টাফ হয়, তাহলে তারা এই ভিউটি অ্যাক্সেস করতে পারবে।

সারাংশ

  • login_required ডেকোরেটরটি ব্যবহারকারীকে লগইন করার পূর্বে নির্দিষ্ট ভিউ অ্যাক্সেস করতে দেয় না। এটি এক্সেস কন্ট্রোলের জন্য খুবই প্রয়োজনীয়।
  • permission_required ডেকোরেটরটি একটি নির্দিষ্ট পারমিশনের মাধ্যমে ভিউয়ের অ্যাক্সেস নিয়ন্ত্রণ করে।
  • user_passes_test ডেকোরেটরটি ব্যবহারকারীর জন্য কাস্টম শর্ত তৈরি করে ভিউ অ্যাক্সেস নিয়ন্ত্রণ করতে সাহায্য করে।

এগুলো Django এর অন্যতম শক্তিশালী টুল, যেগুলি অ্যাপ্লিকেশন নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By

Custom ডেকোরেটর তৈরি করা

180

Django তে ডেকোরেটর হল একটি ফাংশন যা অন্য ফাংশন বা মেথডের আচরণ পরিবর্তন বা প্রসারিত করতে ব্যবহৃত হয়। Custom ডেকোরেটর তৈরি করে আপনি আপনার নিজস্ব ফাংশনালিটি যোগ করতে পারেন, যেমন অ্যাক্সেস কন্ট্রোল, লগিং, বা অন্যান্য সিস্টেম লজিক। Django তে বেশ কিছু বিল্ট-ইন ডেকোরেটর যেমন login_required ইত্যাদি রয়েছে, তবে আপনি কাস্টম ডেকোরেটর তৈরি করে আরো বিশেষ ব্যবহারের জন্য ডেকোরেটর তৈরি করতে পারেন।


Django তে Custom ডেকোরেটর তৈরি করার ধাপ

১. Custom ডেকোরেটর ফাংশন তৈরি করা

ডেকোরেটর সাধারণত একটি ফাংশন যা আরেকটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে এবং তার উপর কোন ফাংশনালিটি প্রয়োগ করে। নিচে একটি সিম্পল কাস্টম ডেকোরেটর উদাহরণ দেওয়া হল, যা শুধুমাত্র সুপারইউজারদের অ্যাক্সেস দেয়।

from django.http import HttpResponseForbidden

def superuser_required(view_func):
    def _wrapped_view(request, *args, **kwargs):
        # চেক করে যে ইউজার সুপারইউজার কি না
        if not request.user.is_superuser:
            return HttpResponseForbidden("You do not have permission to view this page.")
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখানে:

  • superuser_required: এই ডেকোরেটরটি চেক করে যে ইউজার সুপারইউজার কিনা।
  • _wrapped_view: এটি আসল ভিউ ফাংশন যা ডেকোরেটরের মধ্যে আবদ্ধ থাকে এবং ইনপুট হিসেবে request এবং অন্যান্য আর্গুমেন্ট গ্রহণ করে।

২. ডেকোরেটর ব্যবহার করা

একবার আপনি ডেকোরেটর তৈরি করলে, সেটি আপনার ভিউ ফাংশনে ব্যবহার করতে পারেন। ডেকোরেটরটি ব্যবহার করতে, আপনি সাধারণভাবে ভিউ ফাংশনে ডেকোরেটরটি প্রয়োগ করবেন:

from django.shortcuts import render
from .decorators import superuser_required

@superuser_required
def dashboard(request):
    return render(request, 'dashboard.html')

এখানে:

  • @superuser_required: ডেকোরেটরটি ভিউ ফাংশনে প্রয়োগ করা হয়েছে। এর মাধ্যমে, শুধুমাত্র সুপারইউজাররা dashboard ভিউটি অ্যাক্সেস করতে পারবে। অন্যান্য ব্যবহারকারীরা HttpResponseForbidden রিটার্ন করবে।

৩. কাস্টম ডেকোরেটরের অন্যান্য উদাহরণ

ব্যবহারকারী লগইন চেক করা:

from django.http import HttpResponseRedirect
from django.urls import reverse

def login_required_custom(view_func):
    def _wrapped_view(request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponseRedirect(reverse('login'))
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখানে:

  • login_required_custom: যদি ইউজার লগইন না থাকে, তবে ইউজারকে লগইন পেজে রিডাইরেক্ট করবে।

ডেটা ভ্যালিডেশন চেক করা:

from django.http import HttpResponseBadRequest

def validate_data(view_func):
    def _wrapped_view(request, *args, **kwargs):
        data = request.POST.get('data')
        if not data or len(data) < 5:
            return HttpResponseBadRequest("Invalid data provided.")
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখানে:

  • validate_data: ইউজারের পাঠানো ডেটার ভ্যালিডেশন চেক করে, যদি ডেটা সঠিক না হয় তবে HttpResponseBadRequest ফেরত পাঠায়।

কাস্টম ডেকোরেটর তৈরি করার সুবিধা

  • কোড পুনঃব্যবহারযোগ্যতা: একাধিক ভিউতে একই ফাংশনালিটি প্রয়োগ করা সহজ হয়ে যায়।
  • কোড সাদৃশ্য: ডেকোরেটর ব্যবহার করে কোড পরিষ্কার এবং সাদৃশ্যপূর্ণ থাকে।
  • রিয়াসেবল লজিক: আপনি বিভিন্ন ধরনের লগিক ভিউ ফাংশনের বাইরে রাখতে পারেন, যার ফলে আপনার ভিউ ফাংশনগুলো আরও পরিষ্কার ও maintainable হয়।

এইভাবে Django তে আপনি আপনার কাস্টম ডেকোরেটর তৈরি করতে পারেন এবং বিভিন্ন প্রয়োজনে তা ব্যবহার করতে পারেন।

Content added By

Middleware কি এবং এর ভূমিকা

194

Middleware হল একটি কনফিগারেবল সিস্টেম যা Django এর রিকোয়েস্ট-রেসপন্স চক্রে (request-response cycle) একাধিক প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। এটি একটি বৈশিষ্ট্য যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী স্তরে কাজ করে। মডিউলগুলো সাধারণত রিকোয়েস্টে কিছু পরিবর্তন বা প্রক্রিয়া করার পর, তারপর রেসপন্সকে প্রক্রিয়া করে ব্যবহারকারীর কাছে পাঠানোর দায়িত্বে থাকে। এটি Django এর ফ্রেমওয়ার্কের গুরুত্বপূর্ণ একটি অংশ যা বিভিন্ন ধরণের কাজ সহজভাবে সম্পাদন করতে সাহায্য করে, যেমন নিরাপত্তা, কুকিজ এবং সেশন ম্যানেজমেন্ট, লগিং, রিকোয়েস্ট সংশোধন ইত্যাদি।


Middleware এর ভূমিকা

Django তে Middleware কনফিগার করা হয় যাতে বিভিন্ন প্রকারের প্রক্রিয়া/কার্যক্রম স্বয়ংক্রিয়ভাবে HTTP রিকোয়েস্ট বা রেসপন্সে প্রয়োগ করা যায়। এই প্রক্রিয়াগুলির মধ্যে কিছু গুরুত্বপূর্ণ কাজ হচ্ছে:

  • নিরাপত্তা (Security)
  • রিকোয়েস্ট লগিং (Request logging)
  • রেসপন্স লগিং (Response logging)
  • অথেনটিকেশন (Authentication)
  • সেশন এবং কুকিজ ম্যানেজমেন্ট (Session and cookie management)
  • রিকার্সিভ ফিল্টারিং (Content filtering)
  • রিকোয়েস্ট প্রক্রিয়াকরণ (Request preprocessing)

Middleware এর কার্যপ্রণালী

Django মডেলটি HTTP রিকোয়েস্ট আসার সময় middleware stack ব্যবহার করে, যা একটি সিরিজের ফাংশন বা ক্লাসের মাধ্যমে রিকোয়েস্ট এবং রেসপন্স প্রক্রিয়া করে।

রিকোয়েস্ট প্রক্রিয়া:

  • প্রথমে রিকোয়েস্ট Django অ্যাপ্লিকেশনে পৌঁছানোর আগে middleware stack এর মধ্যে চলে যায়। এটি HTTP রিকোয়েস্টকে যাচাই বা পরিবর্তন করতে পারে।
  • একাধিক middleware ফাংশন বা ক্লাস রিকোয়েস্টে কাজ করতে পারে, এবং তারা একটি সিকোয়েন্স অনুযায়ী কার্যকর হয়। এর মধ্যে প্রত্যেকটি middleware রিকোয়েস্টে কিছু পরিবর্তন করতে পারে বা তাকে এগিয়ে যেতে দিতে পারে।

রেসপন্স প্রক্রিয়া:

  • যখন Django রিকোয়েস্ট প্রক্রিয়া সম্পন্ন করে এবং রেসপন্স তৈরি করে, তখন সেই রেসপন্সও middleware stack দিয়ে ফেরত আসে।
  • প্রতিটি middleware ফাংশন বা ক্লাস রেসপন্সে কিছু পরিবর্তন বা অ্যাডজাস্টমেন্ট করতে পারে (যেমন রেসপন্সে হেডার অ্যাড করা, বা রেসপন্সের কনটেন্ট পরিবর্তন করা)।

Middleware এর উদাহরণ

Django তে কিছু সাধারণ middleware থাকে, যা ডিফল্টভাবে ইনস্টল করা থাকে। তাদের মধ্যে কিছু হলো:

  • SecurityMiddleware: এটি নিরাপত্তা সংক্রান্ত কাজের জন্য ব্যবহৃত হয়, যেমন HTTPS বাধ্যতামূলক করা।
  • SessionMiddleware: এটি ইউজারের সেশন পরিচালনা করে।
  • AuthenticationMiddleware: এটি ইউজারের অথেনটিকেশন ম্যানেজ করে, যেমন ইউজার লগইন স্ট্যাটাস।
  • CommonMiddleware: এটি কিছু সাধারণ কাজ করে, যেমন 404 পেজের জন্য কাস্টম রিডাইরেক্টিং।

Django Middleware কনফিগারেশন

Django প্রকল্পে settings.py ফাইলে MIDDLEWARE নামক একটি তালিকা (list) থাকে, যেখানে সমস্ত middleware কনফিগার করা হয়। এই তালিকায় কোন middleware প্রথমে, কোনটি পরবর্তীতে, এবং কোনটি পরে কাজ করবে, তা নির্ধারিত থাকে।

এখানে একটি উদাহরণ:

# settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',  # প্রথমে নিরাপত্তার কাজ হবে
    'django.contrib.sessions.middleware.SessionMiddleware',  # সেশন সম্পর্কিত কাজ
    'django.middleware.common.CommonMiddleware',  # সাধারণ ফিল্টারিং
    'django.middleware.csrf.CsrfViewMiddleware',  # CSRF সুরক্ষা
    'django.contrib.auth.middleware.AuthenticationMiddleware',  # অথেনটিকেশন
    'django.contrib.messages.middleware.MessageMiddleware',  # মেসেজ পরিচালনা
    'django.middleware.clickjacking.XFrameOptionsMiddleware',  # XFrame অপশন
]

Middleware তৈরি করা

আপনি যদি আপনার নিজস্ব middleware তৈরি করতে চান, তাহলে আপনাকে একটি ক্লাস বা ফাংশন তৈরি করতে হবে যা নির্দিষ্ট কিছু কাজ করবে।

ক্লাস বেসড Middleware:

# middleware.py

from django.utils.deprecation import MiddlewareMixin

class CustomMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # রিকোয়েস্ট প্রক্রিয়া করার আগে কিছু করতে পারেন
        print("Processing request:", request.path)

    def process_response(self, request, response):
        # রেসপন্স প্রক্রিয়া করার আগে কিছু করতে পারেন
        print("Processing response:", response.status_code)
        return response

এখন, এই CustomMiddleware কে MIDDLEWARE তালিকায় যোগ করতে হবে:

# settings.py

MIDDLEWARE = [
    'myapp.middleware.CustomMiddleware',  # আমাদের কাস্টম মডিউল
]

ফাংশন বেসড Middleware:

Django 1.10 এর পর থেকে ফাংশন বেসড middleware সমর্থিত। উদাহরণ:

# middleware.py

def custom_middleware(get_response):
    def middleware(request):
        # রিকোয়েস্ট প্রক্রিয়া করার আগে কিছু করতে পারেন
        print("Request processing:", request.path)
        response = get_response(request)
        # রেসপন্স প্রক্রিয়া করার আগে কিছু করতে পারেন
        print("Response processing:", response.status_code)
        return response
    return middleware

এখন এই middleware ফাংশনটিকেও MIDDLEWARE তালিকায় যোগ করা যেতে পারে।


Django তে Middleware এমন একটি প্রক্রিয়া যা রিকোয়েস্ট এবং রেসপন্সের মধ্যে বিভিন্ন কাজ করে, যেমন সুরক্ষা, সেশন ম্যানেজমেন্ট, অথেনটিকেশন, এবং কাস্টম লজিক প্রক্রিয়া। এটি Django অ্যাপ্লিকেশনের কার্যকারিতা বৃদ্ধি করতে এবং প্রক্রিয়া সহজ করতে সহায়তা করে।

Content added By

Custom Middleware তৈরি এবং ব্যবহারের নিয়ম

174

Django এ Middleware একটি কম্পোনেন্ট যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যে মধ্যস্থতাকারী হিসেবে কাজ করে। এটি ডেটা প্রক্রিয়াকরণের সময় বিভিন্ন কাজ করতে পারে যেমন: রিকোয়েস্ট লগিং, সেশন হ্যান্ডলিং, ইউজার অথেনটিকেশন, ইত্যাদি। Django তে আপনি Custom Middleware তৈরি করতে পারেন, যা আপনার প্রয়োজন অনুযায়ী রিকোয়েস্ট এবং রেসপন্সের উপর কাস্টম প্রক্রিয়াকরণ করতে সাহায্য করে।

এখানে, আমরা Django তে Custom Middleware তৈরি এবং ব্যবহারের নিয়ম আলোচনা করবো।


Middleware কী?

Middleware হলো একটি ক্লাস বা ফাংশন যা Django তে HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী পর্যায়ে কাজ করে। এটি রিকোয়েস্ট বা রেসপন্সে কিছু পরিবর্তন করতে পারে, যেমন:

  • রিকোয়েস্ট প্রসেস করার আগে
  • রেসপন্স প্রেরণ করার আগে
  • রিকোয়েস্ট বা রেসপন্সে কাস্টম প্রসেসিং

Custom Middleware তৈরি করার ধাপ

১. Middleware ক্লাস তৈরি করা

Django তে Custom Middleware তৈরি করতে হলে, আপনাকে একটি ক্লাস তৈরি করতে হবে যা __init__ এবং __call__ মেথডগুলি অন্তর্ভুক্ত করবে অথবা process_request এবং process_response মেথডগুলিকে ওভাররাইড করবে।

Django 1.10 থেকে, Middleware এর জন্য নতুন স্টাইলের ক্লাস ব্যবহার করা হয়, যেখানে ক্লাসটি __call__ মেথড বা process_requestprocess_response মেথড ব্যবহার করে কাজ করে।

উদাহরণ:

একটি কাস্টম Middleware তৈরি করি যা প্রতিটি রিকোয়েস্টের লগিং করবে:

import logging

class SimpleLoggingMiddleware:
    def __init__(self, get_response):
        # Middleware এর ইনস্ট্যান্স তৈরি হবে যখন এটি প্রথম রিকোয়েস্ট গ্রহণ করবে।
        self.get_response = get_response
        self.logger = logging.getLogger('django')

    def __call__(self, request):
        # প্রতিটি রিকোয়েস্টের আগে এই অংশটি রান হবে
        self.logger.info(f'Processing request: {request.path}')

        # মূল রিকোয়েস্ট প্রক্রিয়াকরণ (এটি পরবর্তী Middleware বা ভিউ ফাংশনে যাবে)
        response = self.get_response(request)

        # রেসপন্স প্রেরণের আগে
        self.logger.info(f'Response status: {response.status_code}')

        return response

এখানে, SimpleLoggingMiddleware ক্লাসটি request এর path লগ করে এবং রেসপন্সের status_code লগ করে।

২. Middleware-এ process_request এবং process_response ব্যবহার

Django এর পুরনো ভার্সনে, Middleware-এ process_request এবং process_response মেথড ছিল, যা আপনি অতিরিক্ত কাজ করার জন্য ব্যবহার করতে পারেন।

উদাহরণ:
class CustomMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def process_request(self, request):
        # রিকোয়েস্ট প্রসেস করার আগে এই অংশটি রান হবে
        print(f"Processing request for {request.path}")

    def process_response(self, request, response):
        # রেসপন্স প্রেরণের আগে এই অংশটি রান হবে
        print(f"Sending response with status {response.status_code}")
        return response
  • process_request(self, request): রিকোয়েস্ট প্রক্রিয়াকরণের আগে কল হয়।
  • process_response(self, request, response): রেসপন্স প্রেরণের আগে কল হয়।

৩. Middleware এর কাজের স্ট্রাকচার

Custom Middleware এর কাজের স্ট্রাকচার সাধারণত এইরকম হয়:

  1. রিকোয়েস্ট প্রসেসিং: process_request মেথডে।
  2. রেসপন্স প্রসেসিং: process_response মেথডে।

Django তে Custom Middleware ব্যবহার করা

১. settings.py ফাইলে Middleware যুক্ত করা

একটি Custom Middleware তৈরি করার পর, আপনাকে Django এর settings.py ফাইলে এটি যুক্ত করতে হবে। MIDDLEWARE লিস্টে আপনার কাস্টম Middleware ক্লাসটি অন্তর্ভুক্ত করুন।

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
    # আপনার কাস্টম Middleware যোগ করুন
    'myapp.middleware.SimpleLoggingMiddleware',
]

এখানে myapp.middleware.SimpleLoggingMiddleware হল আমাদের তৈরি করা কাস্টম Middleware।

২. Middleware এর অর্ডার

Middleware একাধিক হতে পারে এবং এগুলোর কাজের অর্ডার গুরুত্বপূর্ণ। Django Middleware রিকোয়েস্ট প্রক্রিয়াকরণের সময় উপর থেকে নিচে চলে এবং রেসপন্স প্রেরণের সময় নিচ থেকে উপরে ফিরে আসে। এর মানে হলো, প্রথম Middleware প্রথমে কাজ করবে এবং শেষ Middleware শেষের দিকে কাজ করবে।


Django তে Middleware ব্যবহারের কিছু সাধারণ প্রয়োগ

  1. রিকোয়েস্ট লগিং: যেভাবে উপরের উদাহরণে রিকোয়েস্ট এবং রেসপন্সের লগিং করা হয়েছে।
  2. ইউজার অথেনটিকেশন: কাস্টম Middleware এর মাধ্যমে ইউজারের সেশন এবং লগইন স্টেট চেক করা।
  3. রিকোয়েস্ট প্রিপ্রসেসিং: বিভিন্ন ফর্ম্যাটে ইনপুট ভ্যালিডেশন বা পরিবর্তন করা।
  4. রেসপন্স পরিমার্জন: রেসপন্স পাঠানোর আগে এর কিছু অংশ পরিবর্তন বা সেট করা।

নিরাপত্তা এবং Middleware

Middleware নিরাপত্তা ব্যবস্থার জন্যও ব্যবহৃত হতে পারে, যেমন:

  • CSRF (Cross-Site Request Forgery): Django তে CSRF আক্রমণ প্রতিরোধের জন্য built-in Middleware ব্যবহার করা হয়।
  • Authentication: Middleware ব্যবহার করে ইউজারের অথেনটিকেশন চেক করা যায়, যেমন কাস্টম অথেনটিকেশন মেথড ব্যবহার করা।

সারাংশ

Django তে Custom Middleware তৈরি করা খুবই সহজ এবং এটি আপনার অ্যাপ্লিকেশনের প্রক্রিয়ায় অনেক সুবিধা এনে দেয়। Middleware ব্যবহার করে আপনি রিকোয়েস্ট এবং রেসপন্সে বিভিন্ন কাস্টম প্রসেসিং যুক্ত করতে পারেন, যেমন লগিং, অথেনটিকেশন, রিকোয়েস্ট ফিল্টারিং, এবং আরও অনেক কিছু। Django তে Middleware ব্যবহার করার সময়, সঠিক অর্ডারে এটিকে settings.py ফাইলে অন্তর্ভুক্ত করা গুরুত্বপূর্ণ।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...